﻿//#include<iostream>
//using namespace std;
//
//int main()
//{
//	int a = 0;
//	int& b = a;
//
//	cout << a << endl;
//	cout << b << endl;
//
//	b = 1;
//	cout << a << endl;
//
//	return 0;
// }

//#include <iostream>
//using namespace std;
//
//
//namespace wyx
//{
//	template<class T>
//	void Swap(T& rx, T& ry)
//	{
//		T tmp(rx);
//		rx = ry;
//		ry = tmp;
//	}
//}
//
//
//int main()
//{
//	int x = 7, y = 8;
//	cout << x << ' ' << y << endl;
//
//	wyx::Swap(x, y);
//	cout << x << ' ' << y << endl;
//
//
//	double x2 = 7.2, y2 = 8.1;
//	cout << x2 << ' ' << y2 << endl;
//
//	wyx::Swap(x2, y2);
//	cout << x2 << ' ' << y2 << endl;
//
//	return 0;
//}

//#include <iostream>
//using namespace std;
//
//int main()
//{
//	int x = 0;
//	int& xx = x; //权限平移
//	const int& xxx = x;//权限说小
//
//	const int cx = 0;
//	//int& cxx = cx; // 权限放大，错误的
//	const int& cxx = cx;
//
//	//产生临时对象，临时对象具有常性，必须使用const引用
//	int a = 1;
//	//int& b = a * 3;
//	const int& b = a * 3;
//
//
//	double c = 1.1;
//	//int& d = c;
//	const int& d = c;
//
//	return 0;
//}

#include<iostream>
using namespace std;

void f(int x)
{
	cout << "f(int x)" << endl;
}

void f(int* ptr)
{
	cout << "f(int* ptr)" << endl;
}

int main()
{
	f(0);
	// 本想通过f(NULL)调⽤指针版本的f(int*)函数，但是由于NULL被定义成0，调⽤了f(intx)，因此与程序的初衷相悖。
	f(NULL);
	f((int*)NULL);
	// 编译报错：error C2665: “f”: 2个重载中没有⼀个可以转换所有参数类型
	//f((void*)NULL);
	f(nullptr);
	return 0;
}